struct _PointData
{
GdkEvent *event;
+ GtkWidget *target;
gdouble widget_x;
gdouble widget_y;
static gboolean
_gtk_gesture_update_point (GtkGesture *gesture,
const GdkEvent *event,
+ GtkWidget *target,
double x,
double y,
gboolean add)
GdkEventType event_type;
GdkTouchpadGesturePhase phase;
GdkModifierType state;
+ GtkWidget *target;
source_device = gdk_event_get_source_device (event);
gdk_event_get_state (event, &state);
gdk_event_get_touchpad_gesture_phase (event, &phase);
+ target = gtk_event_controller_get_target (controller);
+
if (gtk_gesture_get_sequence_state (gesture, sequence) != GTK_EVENT_SEQUENCE_DENIED)
priv->last_sequence = sequence;
(event_type == GDK_TOUCHPAD_SWIPE && phase == GDK_TOUCHPAD_GESTURE_PHASE_BEGIN) ||
(event_type == GDK_TOUCHPAD_PINCH && phase == GDK_TOUCHPAD_GESTURE_PHASE_BEGIN))
{
- if (_gtk_gesture_update_point (gesture, event, x, y, TRUE))
+ if (_gtk_gesture_update_point (gesture, event, target, x, y, TRUE))
{
gboolean triggered_recognition;
{
gboolean was_claimed;
- if (_gtk_gesture_update_point (gesture, event, x, y, FALSE))
+ if (_gtk_gesture_update_point (gesture, event, target, x, y, FALSE))
{
if (was_recognized &&
_gtk_gesture_check_recognized (gesture, sequence))
return FALSE;
}
- if (_gtk_gesture_update_point (gesture, event, x, y, FALSE) &&
+ if (_gtk_gesture_update_point (gesture, event, target, x, y, FALSE) &&
_gtk_gesture_check_recognized (gesture, sequence))
g_signal_emit (gesture, signals[UPDATE], 0, sequence);
}
if (point->event)
gdk_event_unref (point->event);
+ if (point->target)
+ g_object_unref (point->target);
+
g_free (point);
}
return data->event;
}
+/*
+ * gtk_gesture_get_last_target:
+ * @gesture: a #GtkGesture
+ * @sequence: event sequence
+ *
+ * Returns the widget that the last event was targeted at.
+ * See gtk_gesture_get_last_event().
+ *
+ * Returns: (transfer none) (nullable): The target of the last event
+ */
+GtkWidget *
+gtk_gesture_get_last_target (GtkGesture *gesture,
+ GdkEventSequence *sequence)
+{
+ GtkGesturePrivate *priv;
+ PointData *data;
+
+ g_return_val_if_fail (GTK_IS_GESTURE (gesture), NULL);
+
+ priv = gtk_gesture_get_instance_private (gesture);
+ data = g_hash_table_lookup (priv->points, sequence);
+
+ if (!data)
+ return NULL;
+
+ return data->target;
+}
+
/**
* gtk_gesture_get_point:
* @gesture: a #GtkGesture